<head><style data-emotion="mantine" data-s=""></style><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Gen patch spacial arrangement = different performance? - Gen Forum | Cycling '74</title><meta name="description" content="I've encountered a weird behaviour. If I have two gen patches with the same exact code, their location influences the CPU usage. The one..."><meta property="og:title" content="Gen patch spacial arrangement = different performance? - Gen Forum | Cycling '74"><meta property="og:description" content="I've encountered a weird behaviour. If I have two gen patches with the same exact code, their location influences the CPU usage. The one..."><meta property="og:image" content="https://assets.cycling74.com/web/logos/c74-com-poster.png"><meta name="twitter:site" content="@cycling74"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:creator" content="@cycling74"><meta name="twitter:title" content="Gen patch spacial arrangement = different performance? - Gen Forum | Cycling '74"><meta name="twitter:description" content="I've encountered a weird behaviour. If I have two gen patches with the same exact code, their location influences the CPU usage. The one..."><meta name="twitter:image" content="https://assets.cycling74.com/web/logos/c74-com-poster.png"><meta name="next-head-count" content="13"><link rel="icon" href="/favicon.ico" type="image/x-icon"><link rel="shortcut icon" href="/favicon.ico" type="image/x-icon"><link href="https://cdnjs.cloudflare.com/ajax/libs/gridlex/2.7.1/gridlex.min.css" rel="stylesheet"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin=""><link rel="preload" href="/_next/static/css/fae4676ce267bea2.css" as="style"><link rel="stylesheet" href="/_next/static/css/fae4676ce267bea2.css" data-n-g=""><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js"></script><script src="/_next/static/chunks/webpack-ae4a70f709593f9f.js" defer=""></script><script src="/_next/static/chunks/framework-81942bc1e06a8d22.js" defer=""></script><script src="/_next/static/chunks/main-c688e98927a10f43.js" defer=""></script><script src="/_next/static/chunks/pages/_app-31d8f035ddc068d3.js" defer=""></script><script src="/_next/static/chunks/849baa33-45282fab30ed3718.js" defer=""></script><script src="/_next/static/chunks/8139-e65e5fe1d2928c3b.js" defer=""></script><script src="/_next/static/chunks/7864-5f868fa17ae77a73.js" defer=""></script><script src="/_next/static/chunks/7124-91f684e6f35ad059.js" defer=""></script><script src="/_next/static/chunks/4406-b43eae1df8813fc0.js" defer=""></script><script src="/_next/static/chunks/6165-d69544fee7730c5f.js" defer=""></script><script src="/_next/static/chunks/5049-b2838b17579f22f5.js" defer=""></script><script src="/_next/static/chunks/4194-9816d616b8de38cd.js" defer=""></script><script src="/_next/static/chunks/1686-e3b811d212b1b939.js" defer=""></script><script src="/_next/static/chunks/pages/forums/%5Bslug%5D-70c0d5a2d16d0845.js" defer=""></script><script src="/_next/static/p57Qg4W47ipoOxQf_kw-Q/_buildManifest.js" defer=""></script><script src="/_next/static/p57Qg4W47ipoOxQf_kw-Q/_ssgManifest.js" defer=""></script><style data-href="https://fonts.googleapis.com/css?family=Lato:300,300italic,400,400italic,700,700italic,900,900italic&amp;display=swap">@font-face{font-family:'Lato';font-style:italic;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/lato/v24/S6u_w4BMUTPHjxsI9w2_Gwfr.woff) format('woff')}@font-face{font-family:'Lato';font-style:italic;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/lato/v24/S6u8w4BMUTPHjxsAXC-s.woff) format('woff')}@font-face{font-family:'Lato';font-style:italic;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/lato/v24/S6u_w4BMUTPHjxsI5wq_Gwfr.woff) format('woff')}@font-face{font-family:'Lato';font-style:italic;font-weight:900;font-display:swap;src:url(https://fonts.gstatic.com/s/lato/v24/S6u_w4BMUTPHjxsI3wi_Gwfr.woff) format('woff')}@font-face{font-family:'Lato';font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/lato/v24/S6u9w4BMUTPHh7USSwiPHw.woff) format('woff')}@font-face{font-family:'Lato';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/lato/v24/S6uyw4BMUTPHjx4wWA.woff) format('woff')}@font-face{font-family:'Lato';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/lato/v24/S6u9w4BMUTPHh6UVSwiPHw.woff) format('woff')}@font-face{font-family:'Lato';font-style:normal;font-weight:900;font-display:swap;src:url(https://fonts.gstatic.com/s/lato/v24/S6u9w4BMUTPHh50XSwiPHw.woff) format('woff')}@font-face{font-family:'Lato';font-style:italic;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/lato/v24/S6u_w4BMUTPHjxsI9w2_FQftx9897sxZ.woff2) format('woff2');unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Lato';font-style:italic;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/lato/v24/S6u_w4BMUTPHjxsI9w2_Gwftx9897g.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'Lato';font-style:italic;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/lato/v24/S6u8w4BMUTPHjxsAUi-qNiXg7eU0.woff2) format('woff2');unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Lato';font-style:italic;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/lato/v24/S6u8w4BMUTPHjxsAXC-qNiXg7Q.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'Lato';font-style:italic;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/lato/v24/S6u_w4BMUTPHjxsI5wq_FQftx9897sxZ.woff2) format('woff2');unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Lato';font-style:italic;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/lato/v24/S6u_w4BMUTPHjxsI5wq_Gwftx9897g.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'Lato';font-style:italic;font-weight:900;font-display:swap;src:url(https://fonts.gstatic.com/s/lato/v24/S6u_w4BMUTPHjxsI3wi_FQftx9897sxZ.woff2) format('woff2');unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Lato';font-style:italic;font-weight:900;font-display:swap;src:url(https://fonts.gstatic.com/s/lato/v24/S6u_w4BMUTPHjxsI3wi_Gwftx9897g.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'Lato';font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/lato/v24/S6u9w4BMUTPHh7USSwaPGQ3q5d0N7w.woff2) format('woff2');unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Lato';font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/lato/v24/S6u9w4BMUTPHh7USSwiPGQ3q5d0.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'Lato';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/lato/v24/S6uyw4BMUTPHjxAwXiWtFCfQ7A.woff2) format('woff2');unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Lato';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/lato/v24/S6uyw4BMUTPHjx4wXiWtFCc.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'Lato';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/lato/v24/S6u9w4BMUTPHh6UVSwaPGQ3q5d0N7w.woff2) format('woff2');unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Lato';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/lato/v24/S6u9w4BMUTPHh6UVSwiPGQ3q5d0.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'Lato';font-style:normal;font-weight:900;font-display:swap;src:url(https://fonts.gstatic.com/s/lato/v24/S6u9w4BMUTPHh50XSwaPGQ3q5d0N7w.woff2) format('woff2');unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Lato';font-style:normal;font-weight:900;font-display:swap;src:url(https://fonts.gstatic.com/s/lato/v24/S6u9w4BMUTPHh50XSwiPGQ3q5d0.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}</style><style data-href="https://fonts.googleapis.com/css?family=Ubuntu+Mono:400&amp;display=swap">@font-face{font-family:'Ubuntu Mono';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/ubuntumono/v17/KFOjCneDtsqEr0keqCMhbCc6CsI.woff) format('woff')}@font-face{font-family:'Ubuntu Mono';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/ubuntumono/v17/KFOjCneDtsqEr0keqCMhbCc3CsTYl4BOQ3o.woff2) format('woff2');unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:'Ubuntu Mono';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/ubuntumono/v17/KFOjCneDtsqEr0keqCMhbCc-CsTYl4BOQ3o.woff2) format('woff2');unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:'Ubuntu Mono';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/ubuntumono/v17/KFOjCneDtsqEr0keqCMhbCc2CsTYl4BOQ3o.woff2) format('woff2');unicode-range:U+1F00-1FFF}@font-face{font-family:'Ubuntu Mono';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/ubuntumono/v17/KFOjCneDtsqEr0keqCMhbCc5CsTYl4BOQ3o.woff2) format('woff2');unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:'Ubuntu Mono';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/ubuntumono/v17/KFOjCneDtsqEr0keqCMhbCc0CsTYl4BOQ3o.woff2) format('woff2');unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Ubuntu Mono';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/ubuntumono/v17/KFOjCneDtsqEr0keqCMhbCc6CsTYl4BO.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}</style><style data-emotion="css-global" data-s="">html{--theme-ui-colors-white:#ffffff;--theme-ui-colors-light10:#eeeeee;--theme-ui-colors-light20:#e6e6e6;--theme-ui-colors-light30:#D9D9D9;--theme-ui-colors-black:#000000;--theme-ui-colors-dark10:#222222;--theme-ui-colors-dark20:#333333;--theme-ui-colors-dark30:#666666;--theme-ui-colors-dark40:#999999;--theme-ui-colors-accent:#0377CB;--theme-ui-colors-warning:#F5BA22;--theme-ui-colors-success:#4CAF50;--theme-ui-colors-error:#DE7E76;--theme-ui-colors-sale:#7033F1;color:var(--theme-ui-colors-text);background-color:var(--theme-ui-colors-background);}</style><style data-emotion="css-global" data-s="">*{box-sizing:border-box;}html{font-family:Lato,sans-serif;font-weight:400;line-height:28px;}html c74--search-highlight{background:#b4dffe;}html .mantine-Menu-item{padding-top:4px;padding-bottom:4px;}html .mantine-Menu-item,html .mantine-Menu-label{font-family:Lato,sans-serif;}html div.mantine-Spotlight-actions{padding-top:0;padding-left:0;padding-right:0;}html input.mantine-Spotlight-searchInput{margin-bottom:0;border-top-color:var(--theme-ui-colors-white);border-left-color:var(--theme-ui-colors-white);border-right-color:var(--theme-ui-colors-white);}html input.mantine-Spotlight-searchInput:focus-within{border-top-color:var(--theme-ui-colors-white);border-left-color:var(--theme-ui-colors-white);border-right-color:var(--theme-ui-colors-white);}body{margin:0;}</style><style data-emotion="css h74rf1" data-s="">.css-h74rf1{font-family:Lato,sans-serif;font-size:18px;font-weight:400;line-height:28px;color:var(--theme-ui-colors-black);background-color:var(--theme-ui-colors-white);margin:auto;position:relative;word-wrap:break-word;}</style><style data-emotion="css 9vd5ud" data-s="">.css-9vd5ud{width:100%;}</style><style data-emotion="css 1yuw26w" data-s="">.css-1yuw26w{position:relative;background-color:var(--theme-ui-colors-light10);}</style><style data-emotion="css u067ud" data-s="">.css-u067ud{margin:0 auto;max-width:76rem;padding-left:24px;padding-right:24px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;padding-top:8px;padding-bottom:8px;}@media screen and (min-width: 606px){.css-u067ud{padding-left:24px;padding-right:24px;}}@media screen and (min-width: 768px){.css-u067ud{padding-left:24px;padding-right:24px;}}@media screen and (min-width: 1016px){.css-u067ud{padding-left:48px;padding-right:48px;}}</style><style data-emotion="css 1eqt554" data-s="">.css-1eqt554{display:block;cursor:pointer;-webkit-text-decoration:none;text-decoration:none;padding-left:0;padding-right:0;padding-top:8px;padding-bottom:8px;color:var(--theme-ui-colors-dark10);text-transform:uppercase;font-size:18px;line-height:24px;font-weight:700;}@media screen and (min-width: 606px){.css-1eqt554{display:none;padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;font-size:15px;}}.css-1eqt554:active{-webkit-text-decoration:none;text-decoration:none;}.css-1eqt554:focus{-webkit-text-decoration:none;text-decoration:none;}.css-1eqt554:hover{-webkit-text-decoration:none;text-decoration:none;}@media screen and (min-width: 768px){.css-1eqt554{padding-right:8px;padding-top:0;padding-bottom:0;font-size:15px;}}@media screen and (min-width: 1016px){.css-1eqt554{padding-right:0;}}</style><style data-emotion="css 4bfoof" data-s="">.css-4bfoof{height:28px;vertical-align:middle;cursor:pointer;}@media screen and (min-width: 606px){.css-4bfoof{height:24px;}}</style><style data-emotion="css 9eyutn" data-s="">.css-9eyutn{margin-right:0;height:16px;}@media screen and (min-width: 606px){.css-9eyutn{margin-right:8px;height:18px;}}@media screen and (min-width: 768px){.css-9eyutn{margin-right:16px;}}@media screen and (min-width: 1016px){.css-9eyutn{margin-right:24px;}}</style><style data-emotion="css 1hixxyy" data-s="">.css-1hixxyy{display:none;-webkit-box-flex:2;-webkit-flex-grow:2;-ms-flex-positive:2;flex-grow:2;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-column-gap:8px;column-gap:8px;}@media screen and (min-width: 606px){.css-1hixxyy{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}}</style><style data-emotion="css 1rdq88z" data-s="">.css-1rdq88z{display:block;cursor:pointer;-webkit-text-decoration:none;text-decoration:none;padding-left:16px;padding-right:0;padding-top:8px;padding-bottom:8px;color:var(--theme-ui-colors-dark10);text-transform:uppercase;font-size:18px;line-height:24px;font-weight:700;}@media screen and (min-width: 606px){.css-1rdq88z{display:block;padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;font-size:15px;}}@media screen and (min-width: 768px){.css-1rdq88z{display:inline;padding-right:8px;padding-top:0;padding-bottom:0;font-size:15px;}}.css-1rdq88z:active{-webkit-text-decoration:none;text-decoration:none;}.css-1rdq88z:focus{-webkit-text-decoration:none;text-decoration:none;}.css-1rdq88z:hover{-webkit-text-decoration:none;text-decoration:none;}@media screen and (min-width: 1016px){.css-1rdq88z{padding-right:16px;}}</style><style data-emotion="css 1vsiq7g" data-s="">.css-1vsiq7g{display:block;cursor:pointer;-webkit-text-decoration:none;text-decoration:none;padding-left:16px;padding-right:0;padding-top:8px;padding-bottom:8px;color:var(--theme-ui-colors-accent);text-transform:uppercase;font-size:18px;line-height:24px;font-weight:700;}@media screen and (min-width: 606px){.css-1vsiq7g{display:block;padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;font-size:15px;}}@media screen and (min-width: 768px){.css-1vsiq7g{display:inline;padding-right:8px;padding-top:0;padding-bottom:0;font-size:15px;}}.css-1vsiq7g:active{-webkit-text-decoration:none;text-decoration:none;}.css-1vsiq7g:focus{-webkit-text-decoration:none;text-decoration:none;}.css-1vsiq7g:hover{-webkit-text-decoration:none;text-decoration:none;}@media screen and (min-width: 1016px){.css-1vsiq7g{padding-right:16px;}}</style><style data-emotion="css 1hh395f" data-s="">.css-1hh395f{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-column-gap:8px;column-gap:8px;}</style><style data-emotion="css 1mzemvk" data-s="">.css-1mzemvk{display:none;cursor:pointer;-webkit-text-decoration:none;text-decoration:none;padding-left:16px;padding-right:0;padding-top:8px;padding-bottom:8px;color:var(--theme-ui-colors-dark10);text-transform:uppercase;font-size:18px;line-height:24px;font-weight:700;}@media screen and (min-width: 606px){.css-1mzemvk{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;font-size:15px;}}@media screen and (min-width: 768px){.css-1mzemvk{display:block;padding-right:8px;padding-top:0;padding-bottom:0;font-size:15px;}}.css-1mzemvk:active{-webkit-text-decoration:none;text-decoration:none;}.css-1mzemvk:focus{-webkit-text-decoration:none;text-decoration:none;}.css-1mzemvk:hover{-webkit-text-decoration:none;text-decoration:none;}@media screen and (min-width: 1016px){.css-1mzemvk{padding-right:16px;}}</style><style data-emotion="css 1j1ozbx" data-s="">.css-1j1ozbx{display:none;}@media screen and (min-width: 606px){.css-1j1ozbx{display:inherit;}}</style><style data-emotion="css 1pmjh25" data-s="">.css-1pmjh25{display:block;cursor:pointer;-webkit-text-decoration:none;text-decoration:none;padding-left:16px;padding-right:0;padding-top:8px;padding-bottom:8px;color:var(--theme-ui-colors-dark10);text-transform:uppercase;font-size:18px;line-height:24px;font-weight:700;}.css-1pmjh25:active{-webkit-text-decoration:none;text-decoration:none;}.css-1pmjh25:focus{-webkit-text-decoration:none;text-decoration:none;}.css-1pmjh25:hover{-webkit-text-decoration:none;text-decoration:none;}@media screen and (min-width: 606px){.css-1pmjh25{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;font-size:15px;}}@media screen and (min-width: 768px){.css-1pmjh25{padding-right:8px;padding-top:0;padding-bottom:0;font-size:15px;}}@media screen and (min-width: 1016px){.css-1pmjh25{padding-right:16px;}}</style><style data-emotion="css zfqav9" data-s="">.css-zfqav9{display:none;position:absolute;left:0;width:100%;padding-left:8px;padding-right:8px;padding-bottom:16px;background:var(--theme-ui-colors-light10);z-index:101;}</style><style data-emotion="css 3stq6u" data-s="">.css-3stq6u >*{font-size:18px;}</style><style data-emotion="css 19hvkw5" data-s="">.css-19hvkw5 >a{padding-left:24px;font-size:18px;}</style><style data-emotion="css 5s4b7p" data-s="">.css-5s4b7p{display:block;cursor:pointer;-webkit-text-decoration:none;text-decoration:none;padding-left:24px;padding-right:16px;padding-top:4px;padding-bottom:4px;color:var(--theme-ui-colors-dark10);font-size:15px;font-weight:400;}@media screen and (min-width: 606px){.css-5s4b7p{display:block;padding-left:0;padding-right:8px;padding-top:0;padding-bottom:0;color:var(--theme-ui-colors-dark30);}}@media screen and (min-width: 768px){.css-5s4b7p{display:inline;padding-right:16px;padding-top:0;padding-bottom:0;}}.css-5s4b7p:active{-webkit-text-decoration:none;text-decoration:none;}.css-5s4b7p:focus{-webkit-text-decoration:none;text-decoration:none;}.css-5s4b7p:hover{-webkit-text-decoration:none;text-decoration:none;}</style><style data-emotion="css 1azvv9z" data-s="">.css-1azvv9z{padding-top:16px;}.css-1azvv9z >*{padding-left:8px;padding-right:8px;padding-top:4px;padding-bottom:4px;font-size:18px;}</style><style data-emotion="css 1cxkj1q" data-s="">.css-1cxkj1q{display:none;background-color:var(--theme-ui-colors-white);position:relative;z-index:100;box-shadow:0px 4px 4px rgba(0, 0, 0, 0.15);}@media screen and (min-width: 606px){.css-1cxkj1q{display:block;}}</style><style data-emotion="css 70t85u" data-s="">.css-70t85u{margin:0 auto;max-width:76rem;padding-left:0;padding-right:24px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:start;-ms-flex-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start;padding-top:8px;padding-bottom:8px;}@media screen and (min-width: 606px){.css-70t85u{padding-left:80px;padding-right:24px;}}@media screen and (min-width: 768px){.css-70t85u{padding-left:80px;padding-right:24px;}}@media screen and (min-width: 1016px){.css-70t85u{padding-left:104px;padding-right:48px;}}</style><style data-emotion="css 1syjh69" data-s="">.css-1syjh69{display:block;cursor:pointer;-webkit-text-decoration:none;text-decoration:none;padding-left:24px;padding-right:16px;padding-top:4px;padding-bottom:4px;color:var(--theme-ui-colors-accent);font-size:15px;font-weight:400;}@media screen and (min-width: 606px){.css-1syjh69{display:block;padding-left:0;padding-right:8px;padding-top:0;padding-bottom:0;}}@media screen and (min-width: 768px){.css-1syjh69{display:inline;padding-right:16px;padding-top:0;padding-bottom:0;}}.css-1syjh69:active{-webkit-text-decoration:none;text-decoration:none;}.css-1syjh69:focus{-webkit-text-decoration:none;text-decoration:none;}.css-1syjh69:hover{-webkit-text-decoration:none;text-decoration:none;}</style><style data-emotion="css luzi3i" data-s="">.css-luzi3i{background-color:var(--theme-ui-colors-white);padding:0;position:relative;margin:auto;min-height:80vh;}</style><style data-emotion="css kuhnuf" data-s="">.css-kuhnuf{position:fixed;bottom:0;right:0;z-index:1000;width:100%;}@media screen and (min-width: 606px){.css-kuhnuf{width:auto;}}</style><style data-emotion="css 16gh5om" data-s="">.css-16gh5om{margin:0;padding:0;}</style><style data-emotion="css ydg00" data-s="">.css-ydg00 h1{font-size:24px;line-height:32px;font-weight:400;margin-bottom:16px;}@media screen and (min-width: 606px){.css-ydg00 h1{font-size:48px;line-height:56px;}}@media screen and (min-width: 768px){.css-ydg00 h1{font-size:60px;line-height:72px;}}.css-ydg00 h2{font-size:20px;line-height:24px;font-weight:300;margin-bottom:16px;}@media screen and (min-width: 606px){.css-ydg00 h2{font-size:30px;line-height:44px;}}@media screen and (min-width: 768px){.css-ydg00 h2{font-size:48px;line-height:56px;}}.css-ydg00 h3{font-size:18px;line-height:24px;font-weight:300;margin-bottom:8px;}@media screen and (min-width: 606px){.css-ydg00 h3{font-size:24px;line-height:44px;}}@media screen and (min-width: 768px){.css-ydg00 h3{font-size:30px;}}.css-ydg00 h4{font-size:18px;line-height:24px;font-weight:300;margin-bottom:4px;}@media screen and (min-width: 606px){.css-ydg00 h4{font-size:24px;line-height:40px;}}.css-ydg00 h5{font-size:15px;line-height:24px;font-weight:400;}.css-ydg00 h6{font-size:15px;line-height:24px;font-weight:400;text-transform:uppercase;}.css-ydg00 p{font-size:15px;}@media screen and (min-width: 606px){.css-ydg00 p{font-size:18px;}}.css-ydg00 p a{color:var(--theme-ui-colors-accent);-webkit-text-decoration:none;text-decoration:none;}</style><style data-emotion="css xg2k3b" data-s="">.css-xg2k3b{margin:0 auto;max-width:76rem;padding-left:24px;padding-right:24px;}@media screen and (min-width: 606px){.css-xg2k3b{padding-left:24px;padding-right:24px;}}@media screen and (min-width: 768px){.css-xg2k3b{padding-left:24px;padding-right:24px;}}@media screen and (min-width: 1016px){.css-xg2k3b{padding-left:48px;padding-right:48px;}}</style><style data-emotion="css 1mjogk7" data-s="">.css-1mjogk7{margin-bottom:16px;}</style><style data-emotion="css 1h9yah9" data-s="">.css-1h9yah9{margin-bottom:8px;}</style><style data-emotion="css 1qdt1jw" data-s="">.css-1qdt1jw{font-size:0.8em;line-height:24px;text-transform:uppercase;font-weight:700;background-color:var(--theme-ui-colors-light10);color:var(--theme-ui-colors-dark30);padding-top:4px;padding-bottom:4px;padding-left:8px;padding-right:8px;margin-right:8px;-webkit-text-decoration:none;text-decoration:none;}</style><style data-emotion="css a5d1xa" data-s="">.css-a5d1xa{margin-top:32px;display:grid;gap:24px;grid-template-columns:100%;grid-template-areas:"actions" "post";}@media screen and (min-width: 768px){.css-a5d1xa{grid-template-columns:75% 25%;grid-template-areas:"post actions";}}</style><style data-emotion="css 1t8d626" data-s="">.css-1t8d626{grid-area:post;}</style><style data-emotion="css wsantg" data-s="">.css-wsantg{display:grid;grid-template-columns:100%;}@media screen and (min-width: 768px){.css-wsantg{grid-template-columns:16% 84%;}}</style><style data-emotion="css 1csbi1r" data-s="">.css-1csbi1r{display:none;}@media screen and (min-width: 768px){.css-1csbi1r{display:block;}}</style><style data-emotion="css 1tpt8gn" data-s="">.css-1tpt8gn{width:100px;height:100px;}</style><style data-emotion="css fq5mtf" data-s="">.css-fq5mtf{display:inline-block;margin-right:16px;}@media screen and (min-width: 768px){.css-fq5mtf{display:none;}}</style><style data-emotion="css 7khrv7" data-s="">.css-7khrv7{width:40px;height:40px;}</style><style data-emotion="css uwnoo8" data-s="">.css-uwnoo8{display:inline-block;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;margin-bottom:16px;}@media screen and (min-width: 768px){.css-uwnoo8{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}}</style><style data-emotion="css 1ooporc" data-s="">.css-1ooporc{font-size:15px;line-height:24px;text-transform:uppercase;font-weight:700;-webkit-text-decoration:none;text-decoration:none;color:var(--theme-ui-colors-dark20);}</style><style data-emotion="css 13tcnbw" data-s="">.css-13tcnbw{font-size:15px;line-height:24px;text-transform:uppercase;font-weight:700;color:var(--theme-ui-colors-dark20);}</style><style data-emotion="css 10lnejh" data-s="">.css-10lnejh ul,.css-10lnejh ol{display:block;list-style-position:inside;padding-left:0;}@media screen and (min-width: 606px){.css-10lnejh ul,.css-10lnejh ol{padding-left:24px;}}.css-10lnejh ul li,.css-10lnejh ol li{font-size:15px;margin-bottom:8px;}@media screen and (min-width: 606px){.css-10lnejh ul li,.css-10lnejh ol li{font-size:18px;}}.css-10lnejh ul li >ul,.css-10lnejh ol li >ul,.css-10lnejh ul li >ol,.css-10lnejh ol li >ol{margin-top:8px;}.css-10lnejh ul li >p,.css-10lnejh ol li >p{margin-top:4px;}.css-10lnejh ul li.c74-unordered-list-item,.css-10lnejh ol li.c74-unordered-list-item,.css-10lnejh ul li.c74-ordered-list-item,.css-10lnejh ol li.c74-ordered-list-item{line-height:140%;}.css-10lnejh ul.c74-dense,.css-10lnejh ol.c74-dense{padding-left:0;}.css-10lnejh ul.c74-dense li,.css-10lnejh ol.c74-dense li{margin-bottom:0;}.css-10lnejh ul.c74-dense li >ul,.css-10lnejh ol.c74-dense li >ul,.css-10lnejh ul.c74-dense li >ol,.css-10lnejh ol.c74-dense li >ol{margin-top:0;padding-left:16px;}.css-10lnejh ul.c74-dense li >p,.css-10lnejh ol.c74-dense li >p{margin-top:0;}.css-10lnejh .c74-dense{font-size:15px;line-height:24px;font-weight:400;}</style><style data-emotion="css fij07y" data-s="">.css-fij07y{border:1px solid transparent;}.css-fij07y ul,.css-fij07y ol{display:block;list-style-position:inside;padding-left:0;}@media screen and (min-width: 606px){.css-fij07y ul,.css-fij07y ol{padding-left:24px;}}.css-fij07y ul li,.css-fij07y ol li{font-size:15px;margin-bottom:8px;}@media screen and (min-width: 606px){.css-fij07y ul li,.css-fij07y ol li{font-size:18px;}}.css-fij07y ul li >ul,.css-fij07y ol li >ul,.css-fij07y ul li >ol,.css-fij07y ol li >ol{margin-top:8px;}.css-fij07y ul li >p,.css-fij07y ol li >p{margin-top:4px;}.css-fij07y ul li.c74-unordered-list-item,.css-fij07y ol li.c74-unordered-list-item,.css-fij07y ul li.c74-ordered-list-item,.css-fij07y ol li.c74-ordered-list-item{line-height:140%;}.css-fij07y ul.c74-dense,.css-fij07y ol.c74-dense{padding-left:0;}.css-fij07y ul.c74-dense li,.css-fij07y ol.c74-dense li{margin-bottom:0;}.css-fij07y ul.c74-dense li >ul,.css-fij07y ol.c74-dense li >ul,.css-fij07y ul.c74-dense li >ol,.css-fij07y ol.c74-dense li >ol{margin-top:0;padding-left:16px;}.css-fij07y ul.c74-dense li >p,.css-fij07y ol.c74-dense li >p{margin-top:0;}.css-fij07y .c74-dense{font-size:15px;line-height:24px;font-weight:400;}.css-fij07y h1{font-size:20px;line-height:24px;font-weight:300;margin-bottom:16px;}@media screen and (min-width: 606px){.css-fij07y h1{font-size:30px;line-height:44px;}}@media screen and (min-width: 768px){.css-fij07y h1{font-size:48px;line-height:56px;}}.css-fij07y p{margin-top:4px;margin-bottom:8px;}.css-fij07y a{color:var(--theme-ui-colors-accent);-webkit-text-decoration:none;text-decoration:none;}.css-fij07y figure{margin-top:24px;margin-bottom:24px;padding:0;margin-left:0;margin-right:0;}.css-fij07y code{background-color:var(--theme-ui-colors-light10);padding-top:4px;padding-bottom:4px;padding-left:4px;padding-right:4px;margin-left:4px;margin-right:4px;border-radius:5px;font-family:Monaco,monospace;font-size:15px;line-height:24px;-webkit-box-decoration-break:clone;box-decoration-break:clone;white-space:pre;}.css-fij07y pre code{display:block;background-color:var(--theme-ui-colors-light10);border-width:1px;border-style:solid;border-color:var(--theme-ui-colors-light30);overflow:auto;position:relative;padding-left:16px;padding-right:16px;padding-top:16px;padding-bottom:16px;border-radius:0;font-family:Monaco,monospace;font-size:15px;line-height:24px;width:100%;margin:0;}.css-fij07y pre code >div{white-space:pre;}.css-fij07y .c74-unstyled{margin-bottom:8px;font-size:15px;white-space:pre-wrap;}@media screen and (min-width: 606px){.css-fij07y .c74-unstyled{margin-bottom:16px;font-size:18px;}}.css-fij07y .c74-unstyled a{color:var(--theme-ui-colors-accent);-webkit-text-decoration:none;text-decoration:none;}.css-fij07y blockquote{border-left-width:6px;border-left-style:solid;border-left-color:var(--theme-ui-colors-light30);background-color:var(--theme-ui-colors-light10);padding-top:16px;padding-bottom:16px;padding-right:8px;padding-left:32px;margin-top:32px;margin-bottom:32px;margin-left:0;margin-right:0;}@media screen and (min-width: 768px){.css-fij07y blockquote{margin-left:32px;margin-right:32px;}}.css-fij07y h2{font-size:20px;line-height:24px;font-weight:300;margin-bottom:16px;margin-top:24px;}@media screen and (min-width: 606px){.css-fij07y h2{font-size:30px;line-height:44px;}}@media screen and (min-width: 768px){.css-fij07y h2{font-size:48px;line-height:56px;}}.css-fij07y h3{font-size:18px;line-height:24px;font-weight:300;margin-bottom:8px;}@media screen and (min-width: 606px){.css-fij07y h3{font-size:24px;line-height:44px;}}@media screen and (min-width: 768px){.css-fij07y h3{font-size:30px;}}.css-fij07y ul{padding-left:24px;margin-top:0;margin-bottom:24px;list-style:disc;list-style-position:outside;}.css-fij07y ul ul{margin-bottom:0;}.css-fij07y ul li>p{display:inline;}.css-fij07y ul li>ul{list-style:circle;}.css-fij07y ul li>ul li>ul{list-style:square;}.css-fij07y ol{margin-top:0;margin-bottom:24px;list-style-position:outside;counter-reset:index;list-style-type:none;}.css-fij07y ol li::before{counter-increment:index;content:counters(index, ".", decimal) ". ";}.css-fij07y ol li>p{display:inline;}.css-fij07y ol ol{margin-bottom:0;}.css-fij07y li >p{margin-top:0;margin-bottom:0;}.css-fij07y >ol{padding-left:0;}</style><style data-emotion="css aq837b" data-s="">.css-aq837b{padding-left:24px;padding-right:24px;padding-top:16px;padding-bottom:16px;margin-top:24px;margin-bottom:24px;background-color:var(--theme-ui-colors-light10);border-width:1px;border-style:solid;border-color:var(--theme-ui-colors-light30);}</style><style data-emotion="css 10mejol" data-s="">.css-10mejol{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}</style><style data-emotion="css p0vksp" data-s="">.css-p0vksp{-webkit-flex:1;-ms-flex:1;flex:1;text-align:left;}</style><style data-emotion="css ag55zj" data-s="">.css-ag55zj{color:var(--theme-ui-colors-accent);}</style><style data-emotion="css 1nbbxml" data-s="">.css-1nbbxml{font-size:15px;line-height:24px;color:var(--theme-ui-colors-dark20);}</style><style data-emotion="css 2kt3wo" data-s="">.css-2kt3wo{font-size:15px;line-height:24px;padding-left:24px;padding-right:24px;padding-top:8px;padding-bottom:8px;width:auto;}</style><style data-emotion="css ya47ha" data-s="">.css-ya47ha{box-sizing:border-box;margin:0;min-width:0;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;display:inline-block;text-align:center;line-height:inherit;-webkit-text-decoration:none;text-decoration:none;font-size:inherit;padding-left:16px;padding-right:16px;padding-top:8px;padding-bottom:8px;color:var(--theme-ui-colors-white);background-color:primary;border:0;border-radius:4px;border-radius:0;border-width:1px;border-style:solid;cursor:pointer;-webkit-transition:all 300ms;transition:all 300ms;text-align:center;-webkit-text-decoration:none;text-decoration:none;background-color:var(--theme-ui-colors-accent);border-color:var(--theme-ui-colors-accent);color:var(--theme-ui-colors-white);font-size:15px;line-height:24px;padding-left:24px;padding-right:24px;padding-top:8px;padding-bottom:8px;width:auto;}.css-ya47ha:hover{background-color:var(--theme-ui-colors-accent);opacity:0.8;}.css-ya47ha[disabled]{opacity:0.5;}</style><style data-emotion="css ycfm1k" data-s="">.css-ycfm1k{box-sizing:border-box;margin:0;min-width:0;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;display:inline-block;text-align:center;line-height:inherit;-webkit-text-decoration:none;text-decoration:none;font-size:inherit;padding-left:16px;padding-right:16px;padding-top:8px;padding-bottom:8px;color:var(--theme-ui-colors-white);background-color:primary;border:0;border-radius:4px;border-radius:0;border-width:1px;border-style:solid;cursor:pointer;-webkit-transition:all 300ms;transition:all 300ms;text-align:center;-webkit-text-decoration:none;text-decoration:none;background-color:var(--theme-ui-colors-accent);border-color:var(--theme-ui-colors-accent);color:var(--theme-ui-colors-white);box-sizing:border-box;margin:0;min-width:0;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;display:inline-block;text-align:center;line-height:inherit;-webkit-text-decoration:none;text-decoration:none;font-size:inherit;padding-left:16px;padding-right:16px;padding-top:8px;padding-bottom:8px;color:var(--theme-ui-colors-white);background-color:primary;border:0;border-radius:4px;border-radius:0;border-width:1px;border-style:solid;cursor:pointer;-webkit-transition:all 300ms;transition:all 300ms;text-align:center;-webkit-text-decoration:none;text-decoration:none;background-color:var(--theme-ui-colors-accent);border-color:var(--theme-ui-colors-accent);color:var(--theme-ui-colors-white);font-size:15px;line-height:24px;padding-left:24px;padding-right:24px;padding-top:8px;padding-bottom:8px;width:auto;}.css-ycfm1k:hover{background-color:var(--theme-ui-colors-accent);opacity:0.8;}.css-ycfm1k[disabled]{opacity:0.5;}.css-ycfm1k:hover{background-color:var(--theme-ui-colors-accent);opacity:0.8;}.css-ycfm1k[disabled]{opacity:0.5;}</style><style data-emotion="css mr0b6g" data-s="">.css-mr0b6g{list-style:none;padding:0;}</style><style data-emotion="css 7styu7" data-s="">.css-7styu7{border-bottom-color:var(--theme-ui-colors-light20);border-bottom-width:1px;border-bottom-style:solid;padding-bottom:16px;}</style><style data-emotion="css 1y6aorq" data-s="">.css-1y6aorq{display:grid;grid-template-columns:100%;padding-top:16px;}@media screen and (min-width: 768px){.css-1y6aorq{grid-template-columns:16% 84%;}}</style><style data-emotion="css 1unptpx" data-s="">.css-1unptpx{display:none;text-align:center;}@media screen and (min-width: 768px){.css-1unptpx{display:block;}}</style><style data-emotion="css 1mt0uno" data-s="">.css-1mt0uno{width:60px;height:60px;}</style><style data-emotion="css s19n6s" data-s="">.css-s19n6s{margin-top:24px;margin-bottom:24px;text-align:center;}</style><style data-emotion="css j4n76n" data-s="">.css-j4n76n{max-width:100%;}</style><style data-emotion="css s0rduo" data-s="">.css-s0rduo{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end;gap:16px;margin-top:24px;}</style><style data-emotion="css ad64wq" data-s="">.css-ad64wq{font-size:0.8em;cursor:pointer;}</style><style data-emotion="css g81e61" data-s="">.css-g81e61{margin-bottom:48px;}</style><style data-emotion="css 6fm9if" data-s="">.css-6fm9if{text-align:center;}</style><style data-emotion="css 1sujjhe" data-s="">.css-1sujjhe{font-size:18px;font-weight:400;line-height:28px;padding-left:24px;padding-right:24px;padding-top:8px;padding-bottom:8px;width:auto;}</style><style data-emotion="css 1qnm48u" data-s="">.css-1qnm48u{box-sizing:border-box;margin:0;min-width:0;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;display:inline-block;text-align:center;line-height:inherit;-webkit-text-decoration:none;text-decoration:none;font-size:inherit;padding-left:16px;padding-right:16px;padding-top:8px;padding-bottom:8px;color:var(--theme-ui-colors-white);background-color:primary;border:0;border-radius:4px;border-radius:0;border-width:1px;border-style:solid;cursor:pointer;-webkit-transition:all 300ms;transition:all 300ms;text-align:center;-webkit-text-decoration:none;text-decoration:none;background-color:var(--theme-ui-colors-dark10);border-color:var(--theme-ui-colors-dark10);color:var(--theme-ui-colors-white);font-size:18px;font-weight:400;line-height:28px;padding-left:24px;padding-right:24px;padding-top:8px;padding-bottom:8px;width:auto;}.css-1qnm48u:hover{background-color:var(--theme-ui-colors-dark30);border-color:var(--theme-ui-colors-dark30);color:var(--theme-ui-colors-white);-webkit-text-decoration:none;text-decoration:none;}.css-1qnm48u[disabled]{opacity:0.5;}</style><style data-emotion="css ush7vm" data-s="">.css-ush7vm{box-sizing:border-box;margin:0;min-width:0;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;display:inline-block;text-align:center;line-height:inherit;-webkit-text-decoration:none;text-decoration:none;font-size:inherit;padding-left:16px;padding-right:16px;padding-top:8px;padding-bottom:8px;color:var(--theme-ui-colors-white);background-color:primary;border:0;border-radius:4px;border-radius:0;border-width:1px;border-style:solid;cursor:pointer;-webkit-transition:all 300ms;transition:all 300ms;text-align:center;-webkit-text-decoration:none;text-decoration:none;background-color:var(--theme-ui-colors-accent);border-color:var(--theme-ui-colors-accent);color:var(--theme-ui-colors-white);box-sizing:border-box;margin:0;min-width:0;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;display:inline-block;text-align:center;line-height:inherit;-webkit-text-decoration:none;text-decoration:none;font-size:inherit;padding-left:16px;padding-right:16px;padding-top:8px;padding-bottom:8px;color:var(--theme-ui-colors-white);background-color:primary;border:0;border-radius:4px;border-radius:0;border-width:1px;border-style:solid;cursor:pointer;-webkit-transition:all 300ms;transition:all 300ms;text-align:center;-webkit-text-decoration:none;text-decoration:none;background-color:var(--theme-ui-colors-dark10);border-color:var(--theme-ui-colors-dark10);color:var(--theme-ui-colors-white);font-size:18px;font-weight:400;line-height:28px;padding-left:24px;padding-right:24px;padding-top:8px;padding-bottom:8px;width:auto;}.css-ush7vm:hover{background-color:var(--theme-ui-colors-accent);opacity:0.8;}.css-ush7vm[disabled]{opacity:0.5;}.css-ush7vm:hover{background-color:var(--theme-ui-colors-dark30);border-color:var(--theme-ui-colors-dark30);color:var(--theme-ui-colors-white);-webkit-text-decoration:none;text-decoration:none;}.css-ush7vm[disabled]{opacity:0.5;}</style><style data-emotion="css d4ple5" data-s="">.css-d4ple5{grid-area:actions;}.css-d4ple5 a,.css-d4ple5 button{margin-bottom:8px;width:100%;}</style><style data-emotion="css 1vh432f" data-s="">.css-1vh432f{background-color:var(--theme-ui-colors-light20);color:var(--theme-ui-colors-dark20);}</style><style data-emotion="css f1xxm2" data-s="">.css-f1xxm2{margin:0 auto;max-width:76rem;padding-left:24px;padding-right:24px;padding-top:64px;padding-bottom:64px;}@media screen and (min-width: 606px){.css-f1xxm2{padding-left:24px;padding-right:24px;}}@media screen and (min-width: 768px){.css-f1xxm2{padding-left:24px;padding-right:24px;}}@media screen and (min-width: 1016px){.css-f1xxm2{padding-left:48px;padding-right:48px;}}</style><style data-emotion="css rumszd" data-s="">.css-rumszd{max-width:160px;margin-bottom:16px;}@media screen and (min-width: 606px){.css-rumszd{max-width:280px;}}</style><style data-emotion="css 1jknibp" data-s="">.css-1jknibp{display:grid;grid-template-columns:1fr;gap:16px;margin-bottom:32px;}@media screen and (min-width: 768px){.css-1jknibp{grid-template-columns:repeat(3, 1fr);}}</style><style data-emotion="css 1kt8fw7" data-s="">.css-1kt8fw7{border-top-color:var(--theme-ui-colors-dark30);border-top-width:0;border-top-style:solid;padding-top:0;}@media screen and (min-width: 768px){.css-1kt8fw7{border-top-width:1px;padding-top:16px;}}</style><style data-emotion="css 1kucbh9" data-s="">.css-1kucbh9{color:var(--theme-ui-colors-dark20);font-size:18px;display:block;padding-top:4px;padding-bottom:4px;-webkit-text-decoration:none;text-decoration:none;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;}</style><style data-emotion="css 1wrmrcl" data-s="">.css-1wrmrcl{margin-bottom:16px;color:var(--theme-ui-colors-dark20);}</style><style data-emotion="css 1bw4j1c" data-s="">.css-1bw4j1c{color:var(--theme-ui-colors-accent);-webkit-text-decoration:none;text-decoration:none;}</style><style data-emotion="css 194sm4k" data-s="">.css-194sm4k{border-top-color:var(--theme-ui-colors-dark30);border-top-width:1px;border-top-style:solid;color:var(--theme-ui-colors-dark30);display:grid;grid-template-columns:1fr;font-size:15px;font-weight:700;-webkit-column-gap:24px;column-gap:24px;row-gap:16px;padding-top:16px;}@media screen and (min-width: 768px){.css-194sm4k{grid-template-columns:auto auto auto 1fr;}}.css-194sm4k a{color:inherit;-webkit-text-decoration:none;text-decoration:none;}</style><style data-emotion="css 1gqvkkt" data-s="">.css-1gqvkkt{cursor:default;position:relative;}.css-1gqvkkt span{transition-duration:.3s;transition-timing-function:ease-in-out;transition-property:opacity;}.css-1gqvkkt .standard{position:absolute;left:0;top:0;width:100%;opacity:1;transition-delay:.05s;}.css-1gqvkkt .over{opacity:0;}.css-1gqvkkt:hover .standard{opacity:0;transition-delay:.0s;}.css-1gqvkkt:hover .over{transition-delay:.05s;opacity:1;}</style><style data-emotion="css 1xj13jl" data-s="">.css-1xj13jl{text-align:left;margin-top:8px;}@media screen and (min-width: 768px){.css-1xj13jl{text-align:right;margin-top:0;}}.css-1xj13jl >a{padding-left:24px;padding-right:24px;color:inherit;-webkit-text-decoration:none;text-decoration:none;}@media screen and (min-width: 768px){.css-1xj13jl >a{padding-left:16px;padding-right:16px;}}.css-1xj13jl >a:first-of-type{padding-left:0;}@media screen and (min-width: 768px){.css-1xj13jl >a:first-of-type{padding-left:16px;}}</style><style data-emotion="css" data-s=""></style><link as="script" rel="prefetch" href="/_next/static/chunks/ff27826a-1720ad6f4529da5c.js"><link as="script" rel="prefetch" href="/_next/static/chunks/8579-21bb1113e1a1f18a.js"><link as="script" rel="prefetch" href="/_next/static/chunks/5055-2aee0b8d93975396.js"><link as="script" rel="prefetch" href="/_next/static/chunks/4413-f6bb715398f2d95f.js"><link as="script" rel="prefetch" href="/_next/static/chunks/pages/index-79e1e7bc2c1bf3d9.js"><link as="script" rel="prefetch" href="/_next/static/chunks/pages/products/%5Bslug%5D-1b35ed28323d1955.js"><link as="script" rel="prefetch" href="/_next/static/chunks/1676-d231574a03202238.js"><link as="script" rel="prefetch" href="/_next/static/chunks/6354-ff5adfd9312c8a10.js"><link as="script" rel="prefetch" href="/_next/static/chunks/pages/%5B...slug%5D-f474a33296688a20.js"><link as="script" rel="prefetch" href="/_next/static/chunks/7300-0d6d768dd4ac2486.js"><link as="script" rel="prefetch" href="/_next/static/chunks/pages/shop-9cddbdacb074888c.js"><link as="script" rel="prefetch" href="/_next/static/chunks/pages/downloads-4df64fe754380442.js"><link as="script" rel="prefetch" href="/_next/static/chunks/1219-4a1f4f565175a863.js"><link as="script" rel="prefetch" href="/_next/static/chunks/pages/forums-395fff1b01257259.js"><link as="script" rel="prefetch" href="/_next/static/chunks/pages/projects-6d8f28b0bbec5849.js"><link as="script" rel="prefetch" href="/_next/static/chunks/8647-e19e6b087e0d7ece.js"><link as="script" rel="prefetch" href="/_next/static/chunks/pages/books-7d5aa2a9056afe54.js"><link as="script" rel="prefetch" href="/_next/static/chunks/6687-cc031da788be6926.js"><link as="script" rel="prefetch" href="/_next/static/chunks/3175-5a17d6969b9b2da2.js"><link as="script" rel="prefetch" href="/_next/static/chunks/pages/author/%5Bid%5D-6e994079bb8566a5.js"></head><body><div id="__next" data-reactroot=""><div class="css-h74rf1"><div class="c74-box"><header class="css-9vd5ud"><div class="css-1yuw26w"><div class="css-u067ud"><div class="css-1eqt554"><svg aria-hidden="true" focusable="false" data-prefix="far" data-icon="bars" class="svg-inline--fa fa-bars c74-icon " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 88C0 74.7 10.7 64 24 64H424c13.3 0 24 10.7 24 24s-10.7 24-24 24H24C10.7 112 0 101.3 0 88zM0 248c0-13.3 10.7-24 24-24H424c13.3 0 24 10.7 24 24s-10.7 24-24 24H24c-13.3 0-24-10.7-24-24zM448 408c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24s10.7-24 24-24H424c13.3 0 24 10.7 24 24z"></path></svg></div><a class="css-4bfoof"><img src="https://assets.cycling74.com/web/logos/C74-dark.svg" class="css-9eyutn"></a><div class="css-1hixxyy"><a class="css-1rdq88z" href="/products/max">Max</a><a class="css-1rdq88z" href="/products/rnbo">RNBO</a><a class="css-1rdq88z" href="/learn">Learn</a><a class="css-1rdq88z" href="/shop">Shop</a><a rel="noopener noreferrer" target="_blank" class="css-1rdq88z" href="https://support.cycling74.com/hc/en-us/">Support</a><a class="css-1vsiq7g" href="/resources">Resources</a></div><div class="css-1hh395f"><a class="css-1mzemvk" href="/downloads">Download</a><div class="css-1j1ozbx"><div class="css-1pmjh25">Sign in</div></div><div class="css-1tt52ng"><svg aria-hidden="true" focusable="false" data-prefix="far" data-icon="magnifying-glass" class="svg-inline--fa fa-magnifying-glass c74-icon " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M368 208A160 160 0 1 0 48 208a160 160 0 1 0 320 0zM337.1 371.1C301.7 399.2 256.8 416 208 416C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208c0 48.8-16.8 93.7-44.9 129.1L505 471c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L337.1 371.1z"></path></svg></div></div></div><div class="css-zfqav9"><div class="css-3stq6u"><a class="css-1rdq88z" href="/products/max">Max</a><div class="css-19hvkw5"><a class="css-5s4b7p" href="/products/max">What is Max</a><a class="css-5s4b7p" href="/products/new-in-max">New in Max</a><a class="css-5s4b7p" href="/products/jitter">Jitter</a><a class="css-5s4b7p" href="/products/maxforlive">Max for Live</a><a class="css-5s4b7p" href="/products/extend-max">Extending Max</a></div><a class="css-1rdq88z" href="/products/rnbo">RNBO</a><a class="css-1rdq88z" href="/learn">Learn</a><a class="css-1rdq88z" href="/shop">Shop</a><a rel="noopener noreferrer" target="_blank" class="css-1rdq88z" href="https://support.cycling74.com/hc/en-us/">Support</a><a class="css-1vsiq7g" href="/resources">Resources</a><div class="css-19hvkw5"><a class="css-5s4b7p" href="/resources">Learning</a><a class="css-5s4b7p" href="/forums">Forums</a><a class="css-5s4b7p" href="/projects">User Projects</a><a class="css-5s4b7p" href="/books">Max Books</a></div><a class="css-1rdq88z" href="/downloads">Download</a></div><div class="css-1azvv9z"><div class="css-1rdq88z">Sign in</div></div></div></div><div class="css-1cxkj1q"><div class="css-70t85u"><a class="css-5s4b7p" href="/resources">Learning</a><a class="css-1syjh69" href="/forums">Forums</a><a class="css-5s4b7p" href="/projects">User Projects</a><a class="css-5s4b7p" href="/books">Max Books</a></div></div></header><main role="main" class="css-luzi3i"><div class="css-kuhnuf"><ul class="css-16gh5om"></ul></div><div class="css-ydg00"><div class="css-xg2k3b"><h1 class="css-1mjogk7">Gen patch spacial arrangement = different performance?</h1><div class="css-1h9yah9"><a href="/forums?category=Gen" class="css-1qdt1jw">Gen</a></div><hr><div class="css-a5d1xa"><div class="css-1t8d626"><div class="css-wsantg"><div class="css-1csbi1r"><a rel="nofollow" href="/author/5463bb3f5ef8ac161eeba51b"><img alt="Paolo Piaser's icon" src="https://secure.gravatar.com/avatar/dd96c6c9c733931ce01c880493f8247c?s=160&amp;d=mm&amp;r=g" class="css-1tpt8gn"></a></div><div><div class="css-fq5mtf"><a rel="nofollow" href="/author/5463bb3f5ef8ac161eeba51b"><img alt="Paolo Piaser's icon" src="https://secure.gravatar.com/avatar/dd96c6c9c733931ce01c880493f8247c?s=160&amp;d=mm&amp;r=g" class="css-7khrv7"></a></div><div class="css-uwnoo8"><a rel="nofollow" href="/author/5463bb3f5ef8ac161eeba51b" class="css-1ooporc">Paolo Piaser</a><div class="css-13tcnbw"><div class="c74-datetime c74-box"><span>May 02 2024 | 8:44 pm</span></div></div></div><div class="css-10lnejh"><div class="css-fij07y"><p>I've encountered a weird behaviour. If I have two gen patches with the same exact code, their location influences the CPU usage. The one on the right is always faster (less CPU expensive) than the one on the left, almost half. </p></div><div class="css-fij07y"><p>Is it expected or am I missing something? </p></div><div class="css-fij07y"><p></p></div><div class="css-aq837b"><div class="css-10mejol"><div class="css-p0vksp"><div class="css-ag55zj">Max Patch<br><span class="css-1nbbxml">Copy patch and select <em>New From Clipboard</em> in Max.</span></div></div><div><button rel="" target="" type="button" class="css-ycfm1k"><svg aria-labelledby="svg-inline--fa-title-gGOP7jMpBZcr" data-prefix="fal" data-icon="copy" class="svg-inline--fa fa-copy c74-icon " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" aria-hidden="true"><title id="svg-inline--fa-title-gGOP7jMpBZcr">Copy Patch</title><path fill="currentColor" d="M384 352H224c-17.7 0-32-14.3-32-32V64c0-17.7 14.3-32 32-32H332.1c4.2 0 8.3 1.7 11.3 4.7l67.9 67.9c3 3 4.7 7.1 4.7 11.3V320c0 17.7-14.3 32-32 32zM433.9 81.9L366.1 14.1c-9-9-21.2-14.1-33.9-14.1H224c-35.3 0-64 28.7-64 64V320c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V115.9c0-12.7-5.1-24.9-14.1-33.9zM64 128c-35.3 0-64 28.7-64 64V448c0 35.3 28.7 64 64 64H224c35.3 0 64-28.7 64-64V416H256v32c0 17.7-14.3 32-32 32H64c-17.7 0-32-14.3-32-32V192c0-17.7 14.3-32 32-32h64V128H64z"></path></svg></button></div></div></div><div class="css-fij07y"><p></p></div></div></div></div><div><hr><ul class="css-mr0b6g"><li id="reply-6633939fcdf9f10013fdab5d" class="css-7styu7"><div class="css-1y6aorq"><div class="css-1unptpx"><a rel="nofollow" href="/author/5463f0ce12d581fd44b362a0"><img alt="👽'tW∆s ∆lienz👽's icon" src="https://secure.gravatar.com/avatar/d8cd86c158c13c9b512eb330433cd678?s=160&amp;d=mm&amp;r=g" class="css-1mt0uno"></a></div><div><div class="css-fq5mtf"><a rel="nofollow" href="/author/5463f0ce12d581fd44b362a0"><img alt="👽'tW∆s ∆lienz👽's icon" src="https://secure.gravatar.com/avatar/d8cd86c158c13c9b512eb330433cd678?s=160&amp;d=mm&amp;r=g" class="css-7khrv7"></a></div><div class="css-uwnoo8"><a rel="nofollow" href="/author/5463f0ce12d581fd44b362a0" class="css-1ooporc">👽'tW∆s ∆lienz👽</a><div class="css-13tcnbw"><div class="c74-datetime c74-box"><span>May 02 2024 | 9:22 pm</span></div></div></div><div class="css-10lnejh"><div class="css-fij07y"><p>the feature in the inspector for "Measure CPU Usage" is not always exact, you have to mouse over and over it to get it to poll. when i check out your patch, i can get both to drop to around the same CPU value of 0.000057 by continually revolving my mouse around that area to keep it polling:</p></div><div class="css-s19n6s"><video src="https://cycling74-web-uploads.s3.amazonaws.com/5463f0ce12d581fd44b362a0/2024-05-02T13:04:55Z/d1.mp4" controls="" class="css-j4n76n"></video></div><div class="css-fij07y"><p>seems this feature is not the most accurate, and is meant more for a general/relative measure of performance.</p></div><div class="css-fij07y"><p></p></div><div class="css-fij07y"><p>for now, i guess i'd just be careful if you're measuring this(the one to the farthest-left [edit- and also, even just one by itself] will sometimes show too large a value and each one can be polled to show a more correct value if you keep mousing over and over the field in the inspector).</p></div><div class="css-fij07y"><p></p></div><div class="css-fij07y"><p>hope it helps 🍻</p></div><div class="css-fij07y"><p></p></div><div class="css-fij07y"><p><strong>Hey Cycling74, maybe this is a bug? </strong></p></div><div class="css-fij07y"><p><strong>EDIT - IT IS A BUG! it happens even with just one</strong></p></div><div class="css-fij07y"><p>in case anyone needs a bug report:</p></div><div class="css-fij07y"><p><strong><em>Problem:</em></strong> <em>gen~ patchers do not show accurate cpu measure within their inspector.</em></p></div><div class="css-fij07y"><p><strong><em>Steps To Reproduce: </em></strong></p></div><div class="css-fij07y"><p>1) <em>create a gen~ patcher, ideally with some simple math within a codebox, and duplicate it, placing the duplicate to the left of the original</em></p></div><div class="css-fij07y"><p>2) <em>go into inspector for both gen~ patchers and activate 'Measure CPU Usage'</em></p></div><div class="css-fij07y"><p>3) <em>within inspector of one gen~ patcher, attempt to poll for the cpu value by mousing over the 'show cpu usage' field repeatedly, and notice the value displayed</em></p></div><div class="css-fij07y"><p>4) <em>go into inspector of other gen~ patcher, attempt to poll for cpu value there in the same way as in step 3, and notice the value displayed</em></p></div><div class="css-fij07y"><p><em>5) now delete one of the gen~ patchers</em></p></div><div class="css-fij07y"><p><em>6) go into the inspector of the remaining gen~ patcher, attempt to poll for cpu value same as in steps 3 and 4 and notice the value displayed</em></p></div><div class="css-fij07y"><p><strong><em>Results:</em></strong> <em>The value displayed in 'show cpu usage' field of the inspector of a gen~ patcher will show an inaccurately wide range of value. When creating multiple gen~ patchers containing the same ops, the gen~ patcher to the farthest-left will show the inaccurate value, while the ones to the right will be more accurate.</em></p></div><div class="css-fij07y"><p><strong><em>Expected Results:</em></strong> <em>gen~ patchers which contain the same exact operations, should measure the same cpu value(or at least, not vary as widely as 200%)</em></p></div><div class="css-fij07y"><p><strong><em>Additional Info:</em></strong> <em>when instantiating more than two gen~ patchers in the same patch, it's always the gen~ patcher to the farthest-left which shows an erroneous value, but the value never seems to go higher than twice the expected value(example: i created two gen~ patchers with same ops, one measured 0.000057 the other 0.000114(sometimes when mousing over it, this one changed to 0.000057 too), then i created a third, and the third one to the farthest-left now still reports as high as 0.000114, while the other two(including the one that used to register too wide a value) then remain close to 0.000057).</em></p></div><div class="css-fij07y"><p><strong><em>also, while it seems to be a problem with simple/object ops too, it's made most apparent with functions written into codebox.</em></strong></p></div><div class="css-fij07y"><p></p></div><div class="css-fij07y"><p>in case cycling74 doesn't see it, </p></div><div class="css-fij07y"><p>anyone can additionally file the proper </p></div><div class="css-fij07y"><p>bug report here<strong><em> -&gt; </em></strong><a target="_blank" rel="noopener noreferrer nofollow" href="https://cycling74.com/support/contact"><strong><em>https://cycling74.com/support/contact</em></strong></a><strong><em> </em></strong><br></p></div></div></div></div><div class="css-s0rduo"><div><a class="css-ad64wq"><span><svg aria-hidden="true" focusable="false" data-prefix="fal" data-icon="link" class="svg-inline--fa fa-link c74-icon " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M591.5 256c50-50 50-131 0-181s-131-50-181 0L387.9 97.6c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l22.6-22.6c37.5-37.5 98.3-37.5 135.8 0s37.5 98.3 0 135.8L444.3 357.9c-37.4 37.4-98.1 37.4-135.6 0c-35.6-35.6-37.6-92.6-4.7-130.6l5.3-6.1c5.8-6.7 5.1-16.8-1.6-22.6s-16.8-5.1-22.6 1.6l-5.3 6.1c-43.9 50.7-41.2 126.7 6.2 174.1c49.9 49.9 130.9 49.9 180.8 0L591.5 256zM48.5 256c-50 50-50 131 0 181s131 50 181 0l22.6-22.6c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0l-22.6 22.6c-37.5 37.5-98.3 37.5-135.8 0s-37.5-98.3 0-135.8L195.7 154.1c37.4-37.4 98.1-37.4 135.6 0c35.6 35.6 37.6 92.6 4.7 130.6l-5.3 6.1c-5.8 6.7-5.1 16.8 1.6 22.6s16.8 5.1 22.6-1.6l5.3-6.1c43.9-50.7 41.2-126.7-6.2-174.1C303.9 81.5 223 81.5 173 131.4L48.5 256z"></path></svg> Share</span></a></div></div></li><li id="reply-6642874444ce560013a06f51" class="css-7styu7"><div class="css-1y6aorq"><div class="css-1unptpx"><a rel="nofollow" href="/author/534d216be9db67d47717c6e6"><img alt="Graham Wakefield's icon" src="https://secure.gravatar.com/avatar/62cb40752da86470267ab985ce43eccb?s=160&amp;d=mm&amp;r=g" class="css-1mt0uno"></a></div><div><div class="css-fq5mtf"><a rel="nofollow" href="/author/534d216be9db67d47717c6e6"><img alt="Graham Wakefield's icon" src="https://secure.gravatar.com/avatar/62cb40752da86470267ab985ce43eccb?s=160&amp;d=mm&amp;r=g" class="css-7khrv7"></a></div><div class="css-uwnoo8"><a rel="nofollow" href="/author/534d216be9db67d47717c6e6" class="css-1ooporc">Graham Wakefield</a><div class="css-13tcnbw"><div class="c74-datetime c74-box"><span>May 14 2024 | 5:33 am</span></div></div></div><div class="css-10lnejh"><div class="css-fij07y"><p><strong>It is not a bug.</strong></p></div><div class="css-fij07y"><p>But I think it may be interesting to look at what is really going on here. </p></div><div class="css-fij07y"><p>Audio processing in MSP runs in blocks of audio, whose size is the "signal vector size" as reported in the audio status window.  Let's say this is 64, and the current sampling rate is 48000Hz.  That means one block every 64/48000 seconds, which is every 1.3333ms.   That means that the entire audio processing of the Max/MSP patch has to complete 64 samples of audio within 1.3333ms, to avoid there being any audio dropouts. </p></div><div class="css-fij07y"><p>Now, the CPU thread that is actually doing audio processing will wake up roughly every 1.3333ms and do all of the computations necessary to produce these 64 samples of audio required. Once it wakes up it work as fast as it can (unless it gets interrupted).  So, we can check the time when the audio thread wakes up to do its work, and then check the time once it has produced all of the 64 samples, and the difference should tell us how long we were working to generate those 64 samples. </p></div><div class="css-fij07y"><p>Let's say it takes only 0.1ms to actually produce those 64 samples. That's 1/13th of the available time, or 7.5%. That's what the CPU % in the Audio Status window tells you -- effectively telling you how much of the available time (which is 1.333ms for 64sigvs and 48kHz samplerate) it actually takes to do what it needs to do.  </p></div><div class="css-fij07y"><p>The fact that this number is not stable, even though the amount of computation to perform is the same, shows you something about how modern CPUs work -- mostly it is varying because there are other CPU threads doing other work at the same time, and sometimes this interrupts the CPU thread that is doing the audio processing.  The CPU tries to balance the work between threads, and sometimes this means it takes time away from the audio thread.  This is all happening at nanosecond scales of time by the way. </p></div><div class="css-fij07y"><p>The "Measure CPU usage" attribute of a gen~ object does more or less the same thing, but only for 1 object: it gets the current system clock time when the gen~ object is told to generate the next 64 samples, and gets the system clock time again when the 64 samples have been generated. The difference is how long gen~ took to produce those samples.  This is then divided by the available time (1.3333ms) to get the ratio of available CPU time used. If the measurement is 0.000057, then 0.000057 * 1.3333ms = 0.000076ms, or 76 nanoseconds.  That's how long gen~ took to produce 64 samples of `out1 = in1*0.5`.   </p></div><div class="css-fij07y"><p>But, as noted above, your computer's CPU is doing lots of other things at the same time, in lots of threads and fibers etc., and sometimes that means the audio thread in Max gets a little more micro-interruptions than other times. That's why the CPU usage wobbles around.   But wobbling between 76 nanoseconds and 152 nanoseconds shouldn't be of any concern!  </p></div><div class="css-fij07y"><p>I tried switching out the gen~ patchers to include the <code>freeverb</code> abstraction inside each one, so that they have a bit more work to do.  I'm seeing the CPU measurements varying between 0.0099 and 0.0015 on my machine. At 64 sigvs and 48kHz samplerate this means it is varying between about 0.0013ms and 0.002ms.  Again we are talking a difference of a few hundred nanoseconds.  I don't see a particular difference between the left and the right patches in terms of performance. </p></div><div class="css-fij07y"><p>OK the last part -- why would it matter whether the patch is on the left or the right? Actually I think it probably doesn't, but it might matter what order they come in the signal graph, which in this case (because neither is dependent on the other) is probably determined by which gen~ object was created first.  When the audio thread gets woken up to process all the objects in the Max patch and generate the next 64 samples, it goes through the MSP objects one by one according to their processing order in the audio graph. Perhaps the audio thread is more or less likely to be interrupted when it just starts up, and that is why one of your gen~ objects seems to be more susceptible to taking up to a few  nanoseconds more to complete than the other? I don't know. </p></div><div class="css-fij07y"><p>But assuredly, the actual machine code generated for both will be identical. The only factor in play here is the nature of modern computer CPUs, which is that performance can be somewhat unpredictable.  Or, it could also be a limitation in the accuracy of the request for the system clock time -- we are talking nanoseconds here. </p></div><div class="css-fij07y"><p>But don't take my word for it. Here's a patch with two identical gen~ objects in them, and the calculations of the CPU time they use, and the difference between these expressed in nanoseconds.</p></div><div class="css-aq837b"><div class="css-10mejol"><div class="css-p0vksp"><div class="css-ag55zj">Max Patch<br><span class="css-1nbbxml">Copy patch and select <em>New From Clipboard</em> in Max.</span></div></div><div><button rel="" target="" type="button" class="css-ycfm1k"><svg aria-labelledby="svg-inline--fa-title-1SYivjmx0viC" data-prefix="fal" data-icon="copy" class="svg-inline--fa fa-copy c74-icon " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" aria-hidden="true"><title id="svg-inline--fa-title-1SYivjmx0viC">Copy Patch</title><path fill="currentColor" d="M384 352H224c-17.7 0-32-14.3-32-32V64c0-17.7 14.3-32 32-32H332.1c4.2 0 8.3 1.7 11.3 4.7l67.9 67.9c3 3 4.7 7.1 4.7 11.3V320c0 17.7-14.3 32-32 32zM433.9 81.9L366.1 14.1c-9-9-21.2-14.1-33.9-14.1H224c-35.3 0-64 28.7-64 64V320c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V115.9c0-12.7-5.1-24.9-14.1-33.9zM64 128c-35.3 0-64 28.7-64 64V448c0 35.3 28.7 64 64 64H224c35.3 0 64-28.7 64-64V416H256v32c0 17.7-14.3 32-32 32H64c-17.7 0-32-14.3-32-32V192c0-17.7 14.3-32 32-32h64V128H64z"></path></svg></button></div></div></div><div class="css-fij07y"><p>On my computer here sometimes it is negative, sometimes positive, which means sometimes one gen~ finishes quicker, sometimes the other does.  And sometimes the difference is zero. The variance is about +/- 300 nanoseconds, less than one millionth of a second. </p></div></div></div></div><div class="css-s0rduo"><div><a class="css-ad64wq"><span><svg aria-hidden="true" focusable="false" data-prefix="fal" data-icon="link" class="svg-inline--fa fa-link c74-icon " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M591.5 256c50-50 50-131 0-181s-131-50-181 0L387.9 97.6c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l22.6-22.6c37.5-37.5 98.3-37.5 135.8 0s37.5 98.3 0 135.8L444.3 357.9c-37.4 37.4-98.1 37.4-135.6 0c-35.6-35.6-37.6-92.6-4.7-130.6l5.3-6.1c5.8-6.7 5.1-16.8-1.6-22.6s-16.8-5.1-22.6 1.6l-5.3 6.1c-43.9 50.7-41.2 126.7 6.2 174.1c49.9 49.9 130.9 49.9 180.8 0L591.5 256zM48.5 256c-50 50-50 131 0 181s131 50 181 0l22.6-22.6c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0l-22.6 22.6c-37.5 37.5-98.3 37.5-135.8 0s-37.5-98.3 0-135.8L195.7 154.1c37.4-37.4 98.1-37.4 135.6 0c35.6 35.6 37.6 92.6 4.7 130.6l-5.3 6.1c-5.8 6.7-5.1 16.8 1.6 22.6s16.8 5.1 22.6-1.6l5.3-6.1c43.9-50.7 41.2-126.7-6.2-174.1C303.9 81.5 223 81.5 173 131.4L48.5 256z"></path></svg> Share</span></a></div></div></li><li id="reply-66431007942329001398b197" class="css-7styu7"><div class="css-1y6aorq"><div class="css-1unptpx"><a rel="nofollow" href="/author/5466ac4aaafdf1577750b61c"><img alt="mizu's icon" src="https://secure.gravatar.com/avatar/610ca3bc2e2fa174007d2ff360af5ad4?s=160&amp;d=mm&amp;r=g" class="css-1mt0uno"></a></div><div><div class="css-fq5mtf"><a rel="nofollow" href="/author/5466ac4aaafdf1577750b61c"><img alt="mizu's icon" src="https://secure.gravatar.com/avatar/610ca3bc2e2fa174007d2ff360af5ad4?s=160&amp;d=mm&amp;r=g" class="css-7khrv7"></a></div><div class="css-uwnoo8"><a rel="nofollow" href="/author/5466ac4aaafdf1577750b61c" class="css-1ooporc">mizu</a><div class="css-13tcnbw"><div class="c74-datetime c74-box"><span>May 14 2024 | 3:17 pm</span></div></div></div><div class="css-10lnejh"><div class="css-fij07y"><p>sorry but irrepressible: gen~ like a FPGA in an ocean full of systemic rogue waves :-)</p></div><div class="css-fij07y"><p>oups</p></div></div></div></div><div class="css-s0rduo"><div><a class="css-ad64wq"><span><svg aria-hidden="true" focusable="false" data-prefix="fal" data-icon="link" class="svg-inline--fa fa-link c74-icon " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M591.5 256c50-50 50-131 0-181s-131-50-181 0L387.9 97.6c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l22.6-22.6c37.5-37.5 98.3-37.5 135.8 0s37.5 98.3 0 135.8L444.3 357.9c-37.4 37.4-98.1 37.4-135.6 0c-35.6-35.6-37.6-92.6-4.7-130.6l5.3-6.1c5.8-6.7 5.1-16.8-1.6-22.6s-16.8-5.1-22.6 1.6l-5.3 6.1c-43.9 50.7-41.2 126.7 6.2 174.1c49.9 49.9 130.9 49.9 180.8 0L591.5 256zM48.5 256c-50 50-50 131 0 181s131 50 181 0l22.6-22.6c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0l-22.6 22.6c-37.5 37.5-98.3 37.5-135.8 0s-37.5-98.3 0-135.8L195.7 154.1c37.4-37.4 98.1-37.4 135.6 0c35.6 35.6 37.6 92.6 4.7 130.6l-5.3 6.1c-5.8 6.7-5.1 16.8 1.6 22.6s16.8 5.1 22.6-1.6l5.3-6.1c43.9-50.7 41.2-126.7-6.2-174.1C303.9 81.5 223 81.5 173 131.4L48.5 256z"></path></svg> Share</span></a></div></div></li></ul></div><div class="css-g81e61"><div class="css-6fm9if"><button rel="" target="" type="button" class="css-ush7vm">Sign in to reply</button></div></div></div><div class="css-d4ple5"></div></div></div></div></main><footer class="css-1vh432f"><div class="css-1xdaglo"><div class="css-1h9yah9"><strong>This website uses cookies.</strong><br>Clicking “Accept” means you consent to your data being processed and you’ll let us use cookies and other technologies to process your personal information to personalize and enhance your experience. Click “Close” to deny consent and continue with technically required cookies that are essential for the website to function.</div><div class="css-1jjf8"><div class="css-1h9sltm"><button rel="" target="" type="button" class="css-1ctm07n">Accept</button></div><div><button rel="" target="" type="button" class="css-giksy0">Close</button></div><div><a rel="" target="" href="/privacy-policy" class="css-1fyywez">Privacy Policy</a></div></div></div><div class="css-f1xxm2"><img src="https://assets.cycling74.com/web/logos/C74-wordmark-dark20.svg" alt="Cycling '74" class="css-rumszd"><div class="css-1jknibp"><div class="css-1kt8fw7"><a href="/products/max" class="css-1kucbh9">Max</a><a href="/products/rnbo" class="css-1kucbh9">RNBO</a><a href="/products/mira" class="css-1kucbh9">Mira</a><a href="/products/maxforlive" class="css-1kucbh9">Max for Live</a><a href="/products/cycles" class="css-1kucbh9">Cycles</a></div><div class="css-1kt8fw7"><a href="/certified-trainers" class="css-1kucbh9">Certified Trainers</a><a href="/books" class="css-1kucbh9">Books</a><a target="_blank" rel="noopener noreferrer" href="https://support.cycling74.com/hc/en-us/articles/360060496154" class="css-1kucbh9">Resellers</a><a href="/forums" class="css-1kucbh9">Forums</a></div><div class="css-1kt8fw7"><a href="/company" class="css-1kucbh9">Company</a><a href="/careers" class="css-1kucbh9">Jobs</a><a href="/contact" class="css-1kucbh9">Contact</a><a target="_blank" rel="noopener noreferrer" href="https://support.cycling74.com/hc/en-us/" class="css-1kucbh9">Support</a><a target="_blank" rel="noopener noreferrer" href="https://status.cycling74.com" class="css-1kucbh9">System Status</a></div></div><div class="css-1wrmrcl"><a href="/newsletter" class="css-1bw4j1c">Sign up for the newsletter</a> to receive the latest news from Cycling ’74</div><div class="css-194sm4k"><div><a href="/terms-and-conditions">Terms and Conditions</a></div><div><a href="/privacy-policy">Privacy Policy</a></div><div class="css-1gqvkkt"><span class="standard">Copyright © <!-- -->2024<!-- --> Cycling ’74</span><span class="over">Made with Remote Work Since 1997</span></div><div class="css-1xj13jl"><a href="https://www.facebook.com/cycling74" target="_blank" rel="noopener noreferrer"><svg aria-labelledby="svg-inline--fa-title-FMLrvc0KzPsm" data-prefix="fab" data-icon="facebook" class="svg-inline--fa fa-facebook fa-lg c74-icon " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" aria-hidden="true"><title id="svg-inline--fa-title-FMLrvc0KzPsm">Link to Cycling '74 Facebook</title><path fill="currentColor" d="M512 256C512 114.6 397.4 0 256 0S0 114.6 0 256C0 376 82.7 476.8 194.2 504.5V334.2H141.4V256h52.8V222.3c0-87.1 39.4-127.5 125-127.5c16.2 0 44.2 3.2 55.7 6.4V172c-6-.6-16.5-1-29.6-1c-42 0-58.2 15.9-58.2 57.2V256h83.6l-14.4 78.2H287V510.1C413.8 494.8 512 386.9 512 256h0z"></path></svg></a><a href="https://x.com/cycling74" target="_blank" rel="noopener noreferrer"><svg aria-labelledby="svg-inline--fa-title-r981PfKiLBki" data-prefix="fab" data-icon="x-twitter" class="svg-inline--fa fa-x-twitter fa-lg c74-icon " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" aria-hidden="true"><title id="svg-inline--fa-title-r981PfKiLBki">Link to Cycling '74 on X (formerly Twitter)</title><path fill="currentColor" d="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z"></path></svg></a><a href="https://www.instagram.com/c74connect/" target="_blank" rel="noopener noreferrer"><svg aria-labelledby="svg-inline--fa-title-qB7EJVZk3EN3" data-prefix="fab" data-icon="instagram" class="svg-inline--fa fa-instagram fa-lg c74-icon " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" aria-hidden="true"><title id="svg-inline--fa-title-qB7EJVZk3EN3">Link to Cycling '74 Instagram</title><path fill="currentColor" d="M224.1 141c-63.6 0-114.9 51.3-114.9 114.9s51.3 114.9 114.9 114.9S339 319.5 339 255.9 287.7 141 224.1 141zm0 189.6c-41.1 0-74.7-33.5-74.7-74.7s33.5-74.7 74.7-74.7 74.7 33.5 74.7 74.7-33.6 74.7-74.7 74.7zm146.4-194.3c0 14.9-12 26.8-26.8 26.8-14.9 0-26.8-12-26.8-26.8s12-26.8 26.8-26.8 26.8 12 26.8 26.8zm76.1 27.2c-1.7-35.9-9.9-67.7-36.2-93.9-26.2-26.2-58-34.4-93.9-36.2-37-2.1-147.9-2.1-184.9 0-35.8 1.7-67.6 9.9-93.9 36.1s-34.4 58-36.2 93.9c-2.1 37-2.1 147.9 0 184.9 1.7 35.9 9.9 67.7 36.2 93.9s58 34.4 93.9 36.2c37 2.1 147.9 2.1 184.9 0 35.9-1.7 67.7-9.9 93.9-36.2 26.2-26.2 34.4-58 36.2-93.9 2.1-37 2.1-147.8 0-184.8zM398.8 388c-7.8 19.6-22.9 34.7-42.6 42.6-29.5 11.7-99.5 9-132.1 9s-102.7 2.6-132.1-9c-19.6-7.8-34.7-22.9-42.6-42.6-11.7-29.5-9-99.5-9-132.1s-2.6-102.7 9-132.1c7.8-19.6 22.9-34.7 42.6-42.6 29.5-11.7 99.5-9 132.1-9s102.7-2.6 132.1 9c19.6 7.8 34.7 22.9 42.6 42.6 11.7 29.5 9 99.5 9 132.1s2.7 102.7-9 132.1z"></path></svg></a><a href="https://www.youtube.com/user/cycling74com" target="_blank" rel="noopener noreferrer"><svg aria-labelledby="svg-inline--fa-title-UDqgOxYDBPvP" data-prefix="fab" data-icon="youtube" class="svg-inline--fa fa-youtube fa-lg c74-icon " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" aria-hidden="true"><title id="svg-inline--fa-title-UDqgOxYDBPvP">Link to Cycling '74 YouTube</title><path fill="currentColor" d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z"></path></svg></a><a href="https://discord.gg/pmStRfUr2k" target="_blank" rel="noopener noreferrer"><svg aria-labelledby="svg-inline--fa-title-jMH89JMmGZNA" data-prefix="fab" data-icon="discord" class="svg-inline--fa fa-discord fa-lg c74-icon " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512" aria-hidden="true"><title id="svg-inline--fa-title-jMH89JMmGZNA">Link to Cycling '74 Discord</title><path fill="currentColor" d="M524.531,69.836a1.5,1.5,0,0,0-.764-.7A485.065,485.065,0,0,0,404.081,32.03a1.816,1.816,0,0,0-1.923.91,337.461,337.461,0,0,0-14.9,30.6,447.848,447.848,0,0,0-134.426,0,309.541,309.541,0,0,0-15.135-30.6,1.89,1.89,0,0,0-1.924-.91A483.689,483.689,0,0,0,116.085,69.137a1.712,1.712,0,0,0-.788.676C39.068,183.651,18.186,294.69,28.43,404.354a2.016,2.016,0,0,0,.765,1.375A487.666,487.666,0,0,0,176.02,479.918a1.9,1.9,0,0,0,2.063-.676A348.2,348.2,0,0,0,208.12,430.4a1.86,1.86,0,0,0-1.019-2.588,321.173,321.173,0,0,1-45.868-21.853,1.885,1.885,0,0,1-.185-3.126c3.082-2.309,6.166-4.711,9.109-7.137a1.819,1.819,0,0,1,1.9-.256c96.229,43.917,200.41,43.917,295.5,0a1.812,1.812,0,0,1,1.924.233c2.944,2.426,6.027,4.851,9.132,7.16a1.884,1.884,0,0,1-.162,3.126,301.407,301.407,0,0,1-45.89,21.83,1.875,1.875,0,0,0-1,2.611,391.055,391.055,0,0,0,30.014,48.815,1.864,1.864,0,0,0,2.063.7A486.048,486.048,0,0,0,610.7,405.729a1.882,1.882,0,0,0,.765-1.352C623.729,277.594,590.933,167.465,524.531,69.836ZM222.491,337.58c-28.972,0-52.844-26.587-52.844-59.239S193.056,219.1,222.491,219.1c29.665,0,53.306,26.82,52.843,59.239C275.334,310.993,251.924,337.58,222.491,337.58Zm195.38,0c-28.971,0-52.843-26.587-52.843-59.239S388.437,219.1,417.871,219.1c29.667,0,53.307,26.82,52.844,59.239C470.715,310.993,447.538,337.58,417.871,337.58Z"></path></svg></a></div></div></div></footer></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"user":{"loaded":true},"post":{"_id":"66338ac8dde3010014e35258","forum_topic":"Gen","sticky":"none","wp_id":[],"allow_replies":true,"tags":[],"admin_tags":[],"status":"public","maxobjs":[],"content":{"type":"doc","content":[{"type":"paragraph","content":[{"type":"text","text":"I've encountered a weird behaviour. If I have two gen patches with the same exact code, their location influences the CPU usage. The one on the right is always faster (less CPU expensive) than the one on the left, almost half. "}]},{"type":"paragraph","content":[{"type":"text","text":"Is it expected or am I missing something? "}]},{"type":"paragraph","content":[]},{"type":"patcher","content":[],"attrs":{"id":"d2005ac96e2e36ebc0a21c1523c37ed9","patch":null}},{"type":"paragraph","content":[]}]},"title":"Gen patch spacial arrangement = different performance?","type":"forum","excerpt":{"text":"I've encountered a weird behaviour. If I have two gen patches with the same exact code, their location influences the CPU usage. The one on..."},"authors":[{"_id":"5463bb3f5ef8ac161eeba51b","name":"Paolo Piaser","gravatar":"dd96c6c9c733931ce01c880493f8247c"}],"replies_last_created_at":"2024-05-14T07:17:27.131Z","replies_last_modified_at":"2024-05-14T07:17:27.128Z","created_at":"2024-05-02T12:44:56.699Z","modified_at":"2024-05-14T07:17:27.148Z","replies":[{"status":"public","maxobjs":[],"_id":"6633939fcdf9f10013fdab5d","content":{"type":"doc","content":[{"type":"paragraph","content":[{"type":"text","text":"the feature in the inspector for \"Measure CPU Usage\" is not always exact, you have to mouse over and over it to get it to poll. when i check out your patch, i can get both to drop to around the same CPU value of 0.000057 by continually revolving my mouse around that area to keep it polling:"}]},{"type":"video","content":[],"attrs":{"url":"https://cycling74-web-uploads.s3.amazonaws.com/5463f0ce12d581fd44b362a0/2024-05-02T13:04:55Z/d1.mp4","caption":""}},{"type":"paragraph","content":[{"type":"text","text":"seems this feature is not the most accurate, and is meant more for a general/relative measure of performance."}]},{"type":"paragraph","content":[]},{"type":"paragraph","content":[{"type":"text","text":"for now, i guess i'd just be careful if you're measuring this(the one to the farthest-left [edit- and also, even just one by itself] will sometimes show too large a value and each one can be polled to show a more correct value if you keep mousing over and over the field in the inspector)."}]},{"type":"paragraph","content":[]},{"type":"paragraph","content":[{"type":"text","text":"hope it helps 🍻"}]},{"type":"paragraph","content":[]},{"type":"paragraph","content":[{"type":"text","marks":[{"type":"bold"}],"text":"Hey Cycling74, maybe this is a bug? "}]},{"type":"paragraph","content":[{"type":"text","marks":[{"type":"bold"}],"text":"EDIT - IT IS A BUG! it happens even with just one"}]},{"type":"paragraph","content":[{"type":"text","text":"in case anyone needs a bug report:"}]},{"type":"paragraph","content":[{"type":"text","marks":[{"type":"bold"},{"type":"italic"}],"text":"Problem:"},{"type":"text","text":" "},{"type":"text","marks":[{"type":"italic"}],"text":"gen~ patchers do not show accurate cpu measure within their inspector."}]},{"type":"paragraph","content":[{"type":"text","marks":[{"type":"bold"},{"type":"italic"}],"text":"Steps To Reproduce: "}]},{"type":"paragraph","content":[{"type":"text","text":"1) "},{"type":"text","marks":[{"type":"italic"}],"text":"create a gen~ patcher, ideally with some simple math within a codebox, and duplicate it, placing the duplicate to the left of the original"}]},{"type":"paragraph","content":[{"type":"text","text":"2) "},{"type":"text","marks":[{"type":"italic"}],"text":"go into inspector for both gen~ patchers and activate 'Measure CPU Usage'"}]},{"type":"paragraph","content":[{"type":"text","text":"3) "},{"type":"text","marks":[{"type":"italic"}],"text":"within inspector of one gen~ patcher, attempt to poll for the cpu value by mousing over the 'show cpu usage' field repeatedly, and notice the value displayed"}]},{"type":"paragraph","content":[{"type":"text","text":"4) "},{"type":"text","marks":[{"type":"italic"}],"text":"go into inspector of other gen~ patcher, attempt to poll for cpu value there in the same way as in step 3, and notice the value displayed"}]},{"type":"paragraph","content":[{"type":"text","marks":[{"type":"italic"}],"text":"5) now delete one of the gen~ patchers"}]},{"type":"paragraph","content":[{"type":"text","marks":[{"type":"italic"}],"text":"6) go into the inspector of the remaining gen~ patcher, attempt to poll for cpu value same as in steps 3 and 4 and notice the value displayed"}]},{"type":"paragraph","content":[{"type":"text","marks":[{"type":"bold"},{"type":"italic"}],"text":"Results:"},{"type":"text","text":" "},{"type":"text","marks":[{"type":"italic"}],"text":"The value displayed in 'show cpu usage' field of the inspector of a gen~ patcher will show an inaccurately wide range of value. When creating multiple gen~ patchers containing the same ops, the gen~ patcher to the farthest-left will show the inaccurate value, while the ones to the right will be more accurate."}]},{"type":"paragraph","content":[{"type":"text","marks":[{"type":"bold"},{"type":"italic"}],"text":"Expected Results:"},{"type":"text","text":" "},{"type":"text","marks":[{"type":"italic"}],"text":"gen~ patchers which contain the same exact operations, should measure the same cpu value(or at least, not vary as widely as 200%)"}]},{"type":"paragraph","content":[{"type":"text","marks":[{"type":"bold"},{"type":"italic"}],"text":"Additional Info:"},{"type":"text","text":" "},{"type":"text","marks":[{"type":"italic"}],"text":"when instantiating more than two gen~ patchers in the same patch, it's always the gen~ patcher to the farthest-left which shows an erroneous value, but the value never seems to go higher than twice the expected value(example: i created two gen~ patchers with same ops, one measured 0.000057 the other 0.000114(sometimes when mousing over it, this one changed to 0.000057 too), then i created a third, and the third one to the farthest-left now still reports as high as 0.000114, while the other two(including the one that used to register too wide a value) then remain close to 0.000057)."}]},{"type":"paragraph","content":[{"type":"text","marks":[{"type":"bold"},{"type":"italic"}],"text":"also, while it seems to be a problem with simple/object ops too, it's made most apparent with functions written into codebox."}]},{"type":"paragraph","content":[]},{"type":"paragraph","content":[{"type":"text","text":"in case cycling74 doesn't see it, "}]},{"type":"paragraph","content":[{"type":"text","text":"anyone can additionally file the proper "}]},{"type":"paragraph","content":[{"type":"text","text":"bug report here"},{"type":"text","marks":[{"type":"bold"},{"type":"italic"}],"text":" -\u003e "},{"type":"text","marks":[{"type":"link","attrs":{"href":"https://cycling74.com/support/contact","target":"_blank","rel":"noopener noreferrer nofollow","class":null}},{"type":"bold"},{"type":"italic"}],"text":"https://cycling74.com/support/contact"},{"type":"text","marks":[{"type":"bold"},{"type":"italic"}],"text":" "},{"type":"hardBreak"}]}]},"modified_at":"2024-05-02T23:21:53.137Z","author":{"_id":"5463f0ce12d581fd44b362a0","name":"👽'tW∆s ∆lienz👽","gravatar":"d8cd86c158c13c9b512eb330433cd678"},"created_at":"2024-05-02T13:22:39.990Z"},{"status":"public","maxobjs":[],"_id":"6642874444ce560013a06f51","content":{"type":"doc","content":[{"type":"paragraph","content":[{"type":"text","marks":[{"type":"bold"}],"text":"It is not a bug."}]},{"type":"paragraph","content":[{"type":"text","text":"But I think it may be interesting to look at what is really going on here. "}]},{"type":"paragraph","content":[{"type":"text","text":"Audio processing in MSP runs in blocks of audio, whose size is the \"signal vector size\" as reported in the audio status window.  Let's say this is 64, and the current sampling rate is 48000Hz.  That means one block every 64/48000 seconds, which is every 1.3333ms.   That means that the entire audio processing of the Max/MSP patch has to complete 64 samples of audio within 1.3333ms, to avoid there being any audio dropouts. "}]},{"type":"paragraph","content":[{"type":"text","text":"Now, the CPU thread that is actually doing audio processing will wake up roughly every 1.3333ms and do all of the computations necessary to produce these 64 samples of audio required. Once it wakes up it work as fast as it can (unless it gets interrupted).  So, we can check the time when the audio thread wakes up to do its work, and then check the time once it has produced all of the 64 samples, and the difference should tell us how long we were working to generate those 64 samples. "}]},{"type":"paragraph","content":[{"type":"text","text":"Let's say it takes only 0.1ms to actually produce those 64 samples. That's 1/13th of the available time, or 7.5%. That's what the CPU % in the Audio Status window tells you -- effectively telling you how much of the available time (which is 1.333ms for 64sigvs and 48kHz samplerate) it actually takes to do what it needs to do.  "}]},{"type":"paragraph","content":[{"type":"text","text":"The fact that this number is not stable, even though the amount of computation to perform is the same, shows you something about how modern CPUs work -- mostly it is varying because there are other CPU threads doing other work at the same time, and sometimes this interrupts the CPU thread that is doing the audio processing.  The CPU tries to balance the work between threads, and sometimes this means it takes time away from the audio thread.  This is all happening at nanosecond scales of time by the way. "}]},{"type":"paragraph","content":[{"type":"text","text":"The \"Measure CPU usage\" attribute of a gen~ object does more or less the same thing, but only for 1 object: it gets the current system clock time when the gen~ object is told to generate the next 64 samples, and gets the system clock time again when the 64 samples have been generated. The difference is how long gen~ took to produce those samples.  This is then divided by the available time (1.3333ms) to get the ratio of available CPU time used. If the measurement is 0.000057, then 0.000057 * 1.3333ms = 0.000076ms, or 76 nanoseconds.  That's how long gen~ took to produce 64 samples of `out1 = in1*0.5`.   "}]},{"type":"paragraph","content":[{"type":"text","text":"But, as noted above, your computer's CPU is doing lots of other things at the same time, in lots of threads and fibers etc., and sometimes that means the audio thread in Max gets a little more micro-interruptions than other times. That's why the CPU usage wobbles around.   But wobbling between 76 nanoseconds and 152 nanoseconds shouldn't be of any concern!  "}]},{"type":"paragraph","content":[{"type":"text","text":"I tried switching out the gen~ patchers to include the "},{"type":"text","marks":[{"type":"code"}],"text":"freeverb"},{"type":"text","text":" abstraction inside each one, so that they have a bit more work to do.  I'm seeing the CPU measurements varying between 0.0099 and 0.0015 on my machine. At 64 sigvs and 48kHz samplerate this means it is varying between about 0.0013ms and 0.002ms.  Again we are talking a difference of a few hundred nanoseconds.  I don't see a particular difference between the left and the right patches in terms of performance. "}]},{"type":"paragraph","content":[{"type":"text","text":"OK the last part -- why would it matter whether the patch is on the left or the right? Actually I think it probably doesn't, but it might matter what order they come in the signal graph, which in this case (because neither is dependent on the other) is probably determined by which gen~ object was created first.  When the audio thread gets woken up to process all the objects in the Max patch and generate the next 64 samples, it goes through the MSP objects one by one according to their processing order in the audio graph. Perhaps the audio thread is more or less likely to be interrupted when it just starts up, and that is why one of your gen~ objects seems to be more susceptible to taking up to a few  nanoseconds more to complete than the other? I don't know. "}]},{"type":"paragraph","content":[{"type":"text","text":"But assuredly, the actual machine code generated for both will be identical. The only factor in play here is the nature of modern computer CPUs, which is that performance can be somewhat unpredictable.  Or, it could also be a limitation in the accuracy of the request for the system clock time -- we are talking nanoseconds here. "}]},{"type":"paragraph","content":[{"type":"text","text":"But don't take my word for it. Here's a patch with two identical gen~ objects in them, and the calculations of the CPU time they use, and the difference between these expressed in nanoseconds."}]},{"type":"patcher","content":[],"attrs":{"id":"ce60f41603bec3dab7e445237da070ea","patch":null}},{"type":"paragraph","content":[{"type":"text","text":"On my computer here sometimes it is negative, sometimes positive, which means sometimes one gen~ finishes quicker, sometimes the other does.  And sometimes the difference is zero. The variance is about +/- 300 nanoseconds, less than one millionth of a second. "}]}]},"modified_at":"2024-05-13T21:42:18.676Z","author":{"_id":"534d216be9db67d47717c6e6","name":"Graham Wakefield","gravatar":"62cb40752da86470267ab985ce43eccb"},"created_at":"2024-05-13T21:33:56.540Z"},{"status":"public","maxobjs":[],"_id":"66431007942329001398b197","content":{"type":"doc","content":[{"type":"paragraph","content":[{"type":"text","text":"sorry but irrepressible: gen~ like a FPGA in an ocean full of systemic rogue waves :-)"}]},{"type":"paragraph","content":[{"type":"text","text":"oups"}]}]},"modified_at":"2024-05-14T07:17:27.128Z","author":{"_id":"5466ac4aaafdf1577750b61c","name":"mizu","gravatar":"610ca3bc2e2fa174007d2ff360af5ad4"},"created_at":"2024-05-14T07:17:27.131Z"}],"name":"gen-patch-spacial-arrangement-different-performance","__v":3}},"__N_SSP":true},"page":"/forums/[slug]","query":{"slug":"gen-patch-spacial-arrangement-different-performance"},"buildId":"p57Qg4W47ipoOxQf_kw-Q","runtimeConfig":{"AUTH_HOSTNAME":"auth.cycling74.com","SITE_HOSTNAME":"cycling74.com","FS_STOREFRONT":"cycling74store.onfastspring.com/popup-cycling74store","MAINTENANCE":"false","RECAPTCHA_SITEKEY":"d1852509-112f-48be-8355-97bbea166828","API_REQUEST_TIMEOUT":"5000","VERSION":"v4.15.5","ALGOLIA_APP_ID":"E6HJDXKPJI","ALGOLIA_SEARCH_API_KEY":"355c164f269addc2711fea72b79f4c7a","ALGOLIA_INDEX_NAME":"c74_com_production"},"isFallback":false,"gssp":true,"appGip":true,"scriptLoader":[]}</script><next-route-announcer><p aria-live="assertive" id="__next-route-announcer__" role="alert" style="border: 0px; clip: rect(0px, 0px, 0px, 0px); height: 1px; margin: -1px; overflow: hidden; padding: 0px; position: absolute; width: 1px; white-space: nowrap; overflow-wrap: normal;"></p></next-route-announcer><div><div dir="ltr"><div><div class="mantine-Modal-root mantine-yxmaw9"></div></div></div></div><script src="/_next/static/chunks/ff27826a-1720ad6f4529da5c.js"></script><script src="/_next/static/chunks/8579-21bb1113e1a1f18a.js"></script><script src="/_next/static/chunks/5055-2aee0b8d93975396.js"></script><script src="/_next/static/chunks/4413-f6bb715398f2d95f.js"></script><script src="/_next/static/chunks/pages/products/%5Bslug%5D-1b35ed28323d1955.js"></script><script src="/_next/static/chunks/1676-d231574a03202238.js"></script><script src="/_next/static/chunks/6354-ff5adfd9312c8a10.js"></script><script src="/_next/static/chunks/pages/%5B...slug%5D-f474a33296688a20.js"></script><script src="/_next/static/chunks/1219-4a1f4f565175a863.js"></script><script src="/_next/static/chunks/pages/forums-395fff1b01257259.js"></script><script src="/_next/static/chunks/6687-cc031da788be6926.js"></script><script src="/_next/static/chunks/3175-5a17d6969b9b2da2.js"></script><script src="/_next/static/chunks/pages/author/%5Bid%5D-6e994079bb8566a5.js"></script><script src="/_next/static/chunks/pages/downloads-4df64fe754380442.js"></script><script src="/_next/static/chunks/pages/projects-6d8f28b0bbec5849.js"></script><script src="/_next/static/chunks/8647-e19e6b087e0d7ece.js"></script><script src="/_next/static/chunks/pages/books-7d5aa2a9056afe54.js"></script><script src="/_next/static/chunks/pages/index-79e1e7bc2c1bf3d9.js"></script><script src="/_next/static/chunks/7300-0d6d768dd4ac2486.js"></script><script src="/_next/static/chunks/pages/shop-9cddbdacb074888c.js"></script></body>